package cn.tuling.v2;


/**
 * 将李斯聚集到韩非子类
 * 优点：
 * 1. 相比v1，效率提升
 * 缺陷：
 * 1. 不符合“开闭原则”，韩非子无法被更多人监控（添加监控者），无法被监控更多行为（添加被监控方法）
 */
public class ObserverTest {
    public static void main(String[] args) {
        HanFeiZi hanFeiZi = new HanFeiZi();
        hanFeiZi.haveBreakfast();
        hanFeiZi.haveFun();
    }
}

interface IHanFeiZi {
    void haveBreakfast();

    void haveFun();
}

class HanFeiZi implements IHanFeiZi {
    private ILiSi liSi = new LiSi();

    @Override
    public void haveBreakfast() {
        System.out.println("韩非子吃饭了");
        liSi.update("韩非子吃饭");
    }

    @Override
    public void haveFun() {
        System.out.println("韩非子娱乐了");
        liSi.update("韩非子娱乐");
    }
}

interface ILiSi {
    void update(String context);
}

class LiSi implements ILiSi {

    @Override
    public void update(String context) {
        System.out.println("李斯：观察到了韩非子的活动");
        this.reportToQinShiHuang(context);
        System.out.println("李斯：报告完毕");
    }

    private void reportToQinShiHuang(String context) {
        System.out.println("李斯：报告秦老板，韩非子有了新活动   " + context);
    }
}